#pragma once

#include "Behaviour.h"
#include "Point.h"
#include "SignalSlot.h"
#include "MainPlayerPosState.h"

namespace game_engine { namespace library
{

/*!
 * \class HUDplayerPosBehaviour
 * \brief 
 */
class HUDplayerPosBehaviour : public game_engine::components::Behaviour
{
///////////////////////////////////////////////////////////////////////////////
// Attribute definition
///////////////////////////////////////////////////////////////////////////////
public:
    cSlot <HUDplayerPosBehaviour, INT32, utils::Point> slotSubjectHasMoved;

private:
    GameObject *subject;
    utils::Point subjectPosition;
    FLOAT32 iconYmin;
    FLOAT32 iconYmax;
    MainPlayerPosState *state;

///////////////////////////////////////////////////////////////////////////////
// Method definition
///////////////////////////////////////////////////////////////////////////////
public:
    // Constructors and Destructors
    HUDplayerPosBehaviour(void);
    HUDplayerPosBehaviour(GameObject *obj);
    virtual ~HUDplayerPosBehaviour(void);

    // Others
    void initialize(void) throw(...);

    // Slots
    INT32 setSubjectPosition(utils::Point position);

    // Getters
    const utils::Point& getSubjectPosition(void) const;
    const FLOAT32 getIconYmin(void) const;
    const FLOAT32 getIconYmax(void) const;

    // Setters
    void setSubject(GameObject *sbj) throw(...);
    void setIconYmin(const FLOAT32 val);
    void setIconYmax(const FLOAT32 val);

};

}}
